package servicios;

import integration.xml.ConvertXML;

import java.rmi.RemoteException;
import java.util.List;

import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.xml.rpc.ServiceException;

import webservice.clientelogisticamonitoreo.ClienteLogisticaMonitoreo;
import EnvioLogLogisticaMonitoreo.EnvioLogLogisticaMonitoreo;
import entities.Configuracion;
import entities.MensajeLog;
import entities.Resultado;
import entities.Venta;


@Stateless
@WebService (name="ServidorEstadoEntregaBean",
serviceName="ServidorEstadoEntregaBeanService",
targetNamespace="http://portalEstadoEntrega/",
portName="ServidorEstadoEntregaBeanPort")
public class ServidorEstadoEntregaBean implements ServidorEstadoEntrega{

	@PersistenceContext
    private EntityManager entityManager;
	
	@Override
	@WebMethod
	public String notificarEntregaDespacho(int idVenta) {
		System.out.println("Entro en notificarEntregaDespacho");
		
		TypedQuery<Venta> q = entityManager.createQuery("from Venta a where a.id = "+ idVenta, Venta.class);
		Venta v = q.getSingleResult();

		System.out.println("Andubo el query");
		
		Resultado resultado = new Resultado();
		if (v != null){
			v.setEstadoEntregado();
			System.out.println("Se cambio el estado");
			entityManager.persist(v);
			System.out.println("Se persistio el estado");
			resultado.setEstadoOK();
			resultado.setMensaje("Modificacion realizada existosamente, Venta: "+v.getId()+" Estado: "+v.getEstado()); 
			System.out.println("Se cargo el resultado");
		}else{
			resultado.setEstadoERROR();
			resultado.setMensaje("No se encontro la Venta: "+idVenta); 
			System.out.println("No se encontro la venta");
		}
		
		TypedQuery<Configuracion> q2 = entityManager.createQuery(
			    "from Configuracion u where u.servicio='informarLog'", Configuracion.class);
		List<Configuracion> resultList = q2.getResultList();
		
		if(resultList != null){
			for(Configuracion c : resultList){
				if (c.isActivo()){	
					MensajeLog ml = new MensajeLog(resultado.getMensaje());
					if(c.isActivo() && c.getTipoComunicacion().equals("Asincronico")){
						EnvioLogLogisticaMonitoreo.mandarLogXML(ConvertXML.convertMensajeLogToXML(ml));
					}
					if(c.isActivo() && c.getTipoComunicacion().equals("Sincronico")){
						String wsdlUrl;
						try {
							wsdlUrl = "http://" + c.getIp() + ":8080/LogisticaMonitoreo/LogisticaMonitoreoWS";
							ClienteLogisticaMonitoreo.informarLog(ConvertXML.convertMensajeLogToXML(ml), wsdlUrl);
							EnvioLogLogisticaMonitoreo.mandarLogXML(ConvertXML.convertMensajeLogToXML(ml));
						} catch (RemoteException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (ServiceException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
				}
			}
		}
		
		System.out.println(ConvertXML.convertResultadoToXML(resultado));
		return ConvertXML.convertResultadoToXML(resultado);
	}


	
	

}
